/*
 * Basket.h
 *  购物蓝，辅助类
 *  Created on: 2020年12月12日
 *      Author: san
 */

#ifndef BASKET_H_
#define BASKET_H_

#include <memory>
#include <set>
#include <iostream>

#include "Quote.h"

class Basket {
public:
	// Basket使用合成的默认构造函数和拷贝控制成员
	void add_item(const Quote &sale) { items.insert(std::shared_ptr<Quote>(sale.clone())); }
	void add_item(Quote &&sale) { items.insert(std::shared_ptr<Quote>(std::move(sale.clone()))); }
	// 打印每本书的总价和篮中所有书的总价
	double total_receipt(std::ostream &) const;

private:
	static bool compare(const std::shared_ptr<Quote> &lhs, const std::shared_ptr<Quote> &rhs)
	{
		return lhs->isbn() < rhs->isbn();
	}

	// multiset, 第二个参数用于排序
	std::multiset<std::shared_ptr<Quote>, decltype(compare)*> items{compare};
};

#endif /* BASKET_H_ */
